import { ref } from 'vue'

/**
 * Tab 项接口定义
 */
export interface TabItem {
  key: string // 唯一标识符
  title: string // tab 显示标题
  props?: Record<string, any> // 传给组件的属性
  component: any // 动态组件
  closable?: boolean // 是否可关闭
}

/**
 * useTabs 组合式函数
 * 用于封装 <a-tabs> 页签的添加、删除、激活逻辑
 */
export const useTabs = (initialTabs: TabItem[] = [], defaultActiveKey?: string) => {
  // tabs 列表（响应式）
  const tabList = ref<TabItem[]>([...initialTabs])
  // 当前激活的 tab key
  const activeKey = ref(defaultActiveKey || initialTabs[0]?.key || '')

  /**
   * 新增 tab 页签
   * @param tab 要添加的 TabItem
   */
  const addTab = (tab: TabItem) => {
    if (!tabList.value.find((t) => t.key === tab.key)) {
      tabList.value.push(tab)
    }
    activeKey.value = tab.key
  }

  /**
   * 删除指定 key 的 tab 页签
   * @param targetKey 要删除的 tab key
   */
  const removeTab = (targetKey: string) => {
    const index = tabList.value.findIndex((t) => t.key === targetKey)
    if (index === -1) return // 没找到不处理
    tabList.value.splice(index, 1) // 删除
    // 如果删除的是当前激活 tab，需要切换到前一个或第一个
    if (activeKey.value === targetKey) {
      const newIndex = index > 0 ? index - 1 : 0
      activeKey.value = tabList.value[newIndex]?.key || ''
    }
  }

  /**
   * 处理 tabs 的编辑操作
   */
  const onEdit = (targetKey: any, action: 'add' | 'remove') => {
    if (action === 'remove' && typeof targetKey === 'string') {
      removeTab(targetKey)
    }
  }

  // 返回组合式函数接口
  return {
    tabList,
    activeKey,
    onEdit,
    addTab,
    removeTab
  }
}
